package cn.antblog.jdk8.function;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;

/**
 * 函数式接口
 * <p>
 * Consumer<T> 接收 T 对象, 无返回值, void accept(T t)
 * Predicate<T> 接收 T 对象, 返回 boolean 值, boolean test(T t)
 * Supplier<T> 无参数, 返回 T 对象, T get()
 * Function<T, R> 接收 T 对象, 返回 R 对象, R apply(T t)
 * BiConsumer<T, U> 接收 T 对象和 U 对象, 无返回值, void accept(T t, U u)
 * BiPredicate<T, U> 接收 T 对象和 U 对象, 返回 boolean 值, boolean test(T t, U u)
 * BiFunction<T, U, R> 接收 T 对象和 U 对象, 返回 R 对象, R apply(T t, U u)
 */
public class FunctionTest {

    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);

        // Predicate<Integer> predicate = n -> true
        // n 是一个参数传递到 Predicate 接口的 test 方法
        // n 如果存在则 test 方法返回 true
        /*System.out.println("输出所有数据：");
        eval(list, n -> true);

        // Predicate<Integer> predicate1 = n -> n%2 == 0
        // n 是一个参数传递到 Predicate 接口的 test 方法
        // 如果 n%2 为 0 test 方法返回 true
        System.out.println("输出所有偶数");
        eval(list, n -> n % 2 == 0);*/

        Map<String, Object> userMap = new HashMap<>();
        userMap.computeIfAbsent("age", s -> "22");
        System.out.println(userMap.computeIfPresent("age", (k, v) -> "33"));
        System.out.println("userMap = " + userMap.toString());

    }


    public static void eval(List<Integer> list, Predicate<Integer> predicate) {
        for (Integer n : list) {
            if (predicate.test(n)) {
                System.out.println(n + "\t");
            }
        }
    }
}
